/**
 */
package com.dingpeikeji.quickdeer.core.modules.vehi.web;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;

import com.dingpeikeji.quickdeer.core.common.config.Global;
import com.dingpeikeji.quickdeer.core.common.persistence.Page;
import com.dingpeikeji.quickdeer.core.common.utils.DateUtils;
import com.dingpeikeji.quickdeer.core.common.utils.StringUtils;
import com.dingpeikeji.quickdeer.core.common.web.BaseController;
import com.dingpeikeji.quickdeer.core.modules.bus.service.TCompBusService;
import com.dingpeikeji.quickdeer.core.modules.realsche.entity.TRealsche;
import com.dingpeikeji.quickdeer.core.modules.realsche.service.TRealscheService;
import com.dingpeikeji.quickdeer.core.modules.sys.utils.UserUtils;
import com.dingpeikeji.quickdeer.core.modules.vehi.entity.TRealscheVehis;
import com.dingpeikeji.quickdeer.core.modules.vehi.service.TRealscheVehisService;

/**
 * 车辆调度Controller
 * @author Zhaoy
 * @version 2016-07-01
 */
@Controller
@RequestMapping(value = "${adminPath}/vehi/tRealscheVehis")
public class TRealscheVehisController extends BaseController {

	@Autowired
	private TRealscheVehisService tRealscheVehisService;
	@Autowired
	private TCompBusService compBusService;
	@Autowired
	private TRealscheService realscheService;
	
	@ModelAttribute
	public TRealscheVehis get(@RequestParam(required=false) String id) {
		if (StringUtils.isNotBlank(id)) {
			return tRealscheVehisService.get(id);
		} else {
			return new TRealscheVehis();
		}
	}
	
	@RequiresPermissions("vehi:tRealscheVehis:view")
	@RequestMapping(value = {"list", ""})
	public String list(TRealscheVehis tRealscheVehis, HttpServletRequest request, HttpServletResponse response, Model model) {
		tRealscheVehis.setOffice(UserUtils.getUser().getOffice());	
		Page<TRealscheVehis> page = tRealscheVehisService.findPage(new Page<TRealscheVehis>(request, response), tRealscheVehis); 
		model.addAttribute("today", DateUtils.getDate("yyyy-MM-dd")); // 当天日期字符串
		model.addAttribute("page", page);
		model.addAttribute("tRealscheVehis", tRealscheVehis);
		if (tRealscheVehis.getDepartdateStr() == null)
			tRealscheVehis.setDepartdateStr(DateUtils.getDate("yyyy-MM-dd").toString());
		return "modules/vehi/tRealscheVehisList";
	}
	
	@RequiresPermissions("vehi:tRentProdVehis:view")
	@RequestMapping(value = "rentprodlist")
	public String rentProdVehilist(TRealscheVehis tRealscheVehis, HttpServletRequest request, HttpServletResponse response, Model model) {
		tRealscheVehis.setOffice(UserUtils.getUser().getOffice());	
		Page<TRealscheVehis> page = tRealscheVehisService.findOrderPage(new Page<TRealscheVehis>(request, response), tRealscheVehis); 
		model.addAttribute("today", DateUtils.getDate("yyyy-MM-dd")); // 当天日期字符串
		model.addAttribute("page", page);
		model.addAttribute("tRealscheVehis", tRealscheVehis);
		if (tRealscheVehis.getDepartdateStr() == null)
			tRealscheVehis.setDepartdateStr(DateUtils.getDate("yyyy-MM-dd").toString());
		return "modules/vehi/tRentProdVehisList";
	}


	@RequiresPermissions("vehi:tRealscheVehis:view")
	@RequestMapping(value = "form")
	public String form(TRealscheVehis tRealscheVehis, Model model) {
		//将该客运公司下的所有汽车型号查询出来
		model.addAttribute("vehiclenameList",compBusService.findListOffice(tRealscheVehis.getOffice().getId()));
		model.addAttribute("tRealscheVehis", tRealscheVehis);
		return "modules/vehi/tRealscheVehisForm";
	}
	
	@RequiresPermissions("vehi:tRentProdVehis:view")
	@RequestMapping(value = "rentform")
	public String rentform(TRealscheVehis tRealscheVehis, Model model) {
		//将该客运公司下的所有汽车型号查询出来
		model.addAttribute("vehiclenameList",compBusService.findListOffice(tRealscheVehis.getOffice().getId()));
		model.addAttribute("tRealscheVehis", tRealscheVehis);
		return "modules/vehi/tRentProdVehisForm";
	}


	@RequiresPermissions("vehi:tRealscheVehis:edit")
	@RequestMapping(value = "save")
	public String save(TRealscheVehis tRealscheVehis, Model model, RedirectAttributes redirectAttributes) {
		if (!beanValidator(model, tRealscheVehis)){
			return form(tRealscheVehis, model);
		}
		tRealscheVehis.setOffice(UserUtils.getUser().getOffice());
		tRealscheVehisService.save(tRealscheVehis);
		//将同一班次下的车辆信息查询出来
		TRealscheVehis tRealscheVehis2 = new TRealscheVehis();
		tRealscheVehis2.setRealscheid(tRealscheVehis.getRealscheid());
		ArrayList<TRealscheVehis> list =  (ArrayList<TRealscheVehis>) tRealscheVehisService.findList(tRealscheVehis2);
		//循环相加座位数
		long num = 0;
		for (int i = 0; i < list.size(); i++) {
			if (list.get(i).getRealvehiid()!=tRealscheVehis.getRealvehiid()) {
				num = num+Integer.valueOf(list.get(i).getSeats()).intValue();
			}
		}
		//修改实际班次的座位数
		TRealsche realsche =  realscheService.get(tRealscheVehis.getRealscheid());
		realsche.setTotalseats(String.valueOf(num));
		realscheService.update(realsche);
		addMessage(redirectAttributes, "保存车辆调度成功");
		return "redirect:"+Global.getAdminPath()+"/vehi/tRealscheVehis/?repage";
	}
	
	@RequiresPermissions("vehi:tRentProdVehis:edit")
	@RequestMapping(value = "rentsave")
	public String rentsave(TRealscheVehis tRealscheVehis, Model model, RedirectAttributes redirectAttributes) {
		if (!beanValidator(model, tRealscheVehis)){
			return form(tRealscheVehis, model);
		}
		tRealscheVehis.setOffice(UserUtils.getUser().getOffice());
		tRealscheVehisService.save(tRealscheVehis);

		addMessage(redirectAttributes, "保存车辆调度成功");
		return "redirect:"+Global.getAdminPath()+"/vehi/tRealscheVehis/rentprodlist?repage";
	}
	
	@RequiresPermissions("vehi:tRentProdVehis:edit")
	@RequestMapping(value = "rentconfirm")
	public String rentconfirm(TRealscheVehis tRealscheVehis, Model model, RedirectAttributes redirectAttributes) {
		if (!tRealscheVehis.getVehistatus().equals(TRealscheVehis.VEHI_ST_BOOKED))
			addMessage(redirectAttributes, "该车辆已调度！");
		else {
			tRealscheVehis.setVehistatus(TRealscheVehis.VEHI_ST_CONFIRMED);
			tRealscheVehisService.confirm(tRealscheVehis);	
			addMessage(redirectAttributes, "确认车辆调度成功");
		}
		return "redirect:"+Global.getAdminPath()+"/vehi/tRealscheVehis/rentprodlist?repage";
	}
	
	@RequiresPermissions("vehi:tRealscheVehis:edit")
	@RequestMapping(value = "delete")
	public String delete(TRealscheVehis tRealscheVehis, RedirectAttributes redirectAttributes) {
		tRealscheVehisService.delete(tRealscheVehis);
		addMessage(redirectAttributes, "删除车辆调度成功");
		return "redirect:"+Global.getAdminPath()+"/vehi/tRealscheVehis/?repage";
	}

}
